// 初始化插件
// 全局保存当前选中窗口
var g_iWndIndex = 0; //可以不用设置这个变量，有窗口参数的接口中，不用传值，开发包会默认使用当前选择窗口
$(function () {
    // 检查插件是否已经安装过
    var iRet = WebVideoCtrl.I_CheckPluginInstall();
    if (-1 == iRet) {
        alert("您还未安装过插件，双击开发包目录里的WebComponentsKit.exe安装！");
        return;
    }

    // 初始化插件参数及插入插件
    WebVideoCtrl.I_InitPlugin(500, 300, {
        bWndFull: true,     //是否支持单窗口双击全屏，默认支持 true:支持 false:不支持
        iPackageType: 2,    //2:PS 11:MP4
        iWndowType: 4,
        bNoPlugin: true,
        cbInitPluginComplete: function () {
            WebVideoCtrl.I_InsertOBJECTPlugin("videoDiv");
            // 检查插件是否最新
            if (-1 == WebVideoCtrl.I_CheckPluginVersion()) {
                alert("检测到新的插件版本，双击开发包目录里的WebComponentsKit.exe升级！");
                return;
            }
        }
    });

});

// 登录
function clickLogin() {
    var rs = false;
    var szIP = loginIp,
        szPort = port,
        szUsername = username,
        szPassword = pwd;

    if ("" == szIP || "" == szPort) {
        return rs;
    }

    var szDeviceIdentify = szIP + "_" + szPort;

    var iRet = WebVideoCtrl.I_Login(szIP, 1, szPort, szUsername, szPassword, {
        success: function (xmlDoc) {
            rs = true;
            console.debug(szDeviceIdentify + " 登录成功！");

            devIp.push(szDeviceIdentify);
            setTimeout(function () {
                getChannelInfo();
                getDevicePort();
                // 获取通道成功后，直接调用开始预览进行预览操作
                clickStartRealPlay();
            }, 10);
        },
        error: function (status, xmlDoc) {
            rs = false;
            console.debug(szDeviceIdentify + " 登录失败！", status, xmlDoc);
        }
    });

    if (-1 == iRet) {
        rs = true;
        console.debug(szDeviceIdentify + " 已登录过！");
    }
    return rs;
}

// 获取端口
function getDevicePort() {
    var szDeviceIdentify = devIp;

    if (null == szDeviceIdentify) {
        return;
    }

    var oPort = WebVideoCtrl.I_GetDevicePort(szDeviceIdentify);
    if (oPort != null) {
        console.debug(szDeviceIdentify + " 获取端口成功！");
    } else {
        console.debug(szDeviceIdentify + " 获取端口失败！");
    }
}

// 退出
function clickLogout() {
    var rs = false;
    var szDeviceIdentify = devIp[0], szInfo = "";

    if (null == szDeviceIdentify) {
        return rs;
    }

    var iRet = WebVideoCtrl.I_Logout(szDeviceIdentify);
    if (0 == iRet) {
        rs = true;
        szInfo = "退出成功！";
        $("#ip option[value='" + szDeviceIdentify + "']").remove();
        getChannelInfo();
        getDevicePort();
        chanels = [];
        devIp = [];
        // wndIdx.forEach(function(idx) {
        //     clickStopRealPlay(idx);
        // });
        wndIdx = [];
    } else {
        rs = false;
        szInfo = "退出失败！";
    }
    console.debug(szDeviceIdentify + " " + szInfo);
    return rs;
}

// 获取通道
function getChannelInfo() {
    var szDeviceIdentify = devIp[0], oSel = $("#channels").empty();

    if (null == szDeviceIdentify) {
        return;
    }

    // 模拟通道
    WebVideoCtrl.I_GetAnalogChannelInfo(szDeviceIdentify, {
        async: false,
        success: function (xmlDoc) {
            var oChannels = $(xmlDoc).find("VideoInputChannel");

            $.each(oChannels, function (i) {
                var id = $(this).find("id").eq(0).text(),
                    name = $(this).find("name").eq(0).text();
                if ("" == name) {
                    name = "Camera " + (i < 9 ? "0" + (i + 1) : (i + 1));
                }
                chanels.push(id);
                oSel.append("<option value='" + id + "' bZero='false'>" + name + "</option>");
            });
            console.debug("channels = " + chanels)
            console.debug(szDeviceIdentify + " 获取模拟通道成功！");
        },
        error: function (status, xmlDoc) {
            console.debug(szDeviceIdentify + " 获取模拟通道失败！", status, xmlDoc);
        }
    });
    // 数字通道
    WebVideoCtrl.I_GetDigitalChannelInfo(szDeviceIdentify, {
        async: false,
        success: function (xmlDoc) {
            var oChannels = $(xmlDoc).find("InputProxyChannelStatus");

            $.each(oChannels, function (i) {
                var id = $(this).find("id").eq(0).text(),
                    name = $(this).find("name").eq(0).text(),
                    online = $(this).find("online").eq(0).text();
                if ("false" == online) {// 过滤禁用的数字通道
                    return true;
                }
                if ("" == name) {
                    name = "IPCamera " + (i < 9 ? "0" + (i + 1) : (i + 1));
                }
                chanels.push(id);
                oSel.append("<option value='" + id + "' bZero='false'>" + name + "</option>");
            });
            console.debug(szDeviceIdentify + " 获取数字通道成功！");
        },
        error: function (status, xmlDoc) {
            console.debug(szDeviceIdentify + " 获取数字通道失败！", status, xmlDoc);
        }
    });
    // 零通道
    WebVideoCtrl.I_GetZeroChannelInfo(szDeviceIdentify, {
        async: false,
        success: function (xmlDoc) {
            var oChannels = $(xmlDoc).find("ZeroVideoChannel");

            $.each(oChannels, function (i) {
                var id = $(this).find("id").eq(0).text(),
                    name = $(this).find("name").eq(0).text();
                if ("" == name) {
                    name = "Zero Channel " + (i < 9 ? "0" + (i + 1) : (i + 1));
                }
                if ("true" == $(this).find("enabled").eq(0).text()) {// 过滤禁用的零通道
                    chanels.push(id);
                    oSel.append("<option value='" + id + "' bZero='true'>" + name + "</option>");
                }
            });
            console.debug(szDeviceIdentify + " 获取零通道成功！");
        },
        error: function (status, xmlDoc) {
            console.debug(szDeviceIdentify + " 获取零通道失败！", status, xmlDoc);
        }
    });
}

// 开始预览
function clickStartRealPlay(iStreamType) {
    console.debug("当前通道：" + parseInt($("#channels").val(), 10))
    var bZeroChannel = $("#channels option").eq($("#channels").get(0).selectedIndex).attr("bZero") == "true" ? true : false;
    startRealPlay(iStreamType, devIp[0], port, parseInt($("#channels").val(), 10), bZeroChannel, null);

}

/**
 * 开始预览
 * @param iStreamType   主码类型
 * @param devIp         设备IP地址
 * @param port          端口
 * @param channelId     通道ID
 * @param bZeroChannel  是否0通道
 * @param iWndIndex     显示窗口位置，0开始
 */
function startRealPlay(iStreamType, devIp, port, channelId, bZeroChannel, iWndIndex) {
    var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex)

    if ("undefined" === typeof iStreamType) {
        iStreamType = streamtype;
    }

    if (null == devIp) {
        return;
    }

    var startRealPlay = function () {
        var param = {
            iRtspPort: port,
            iStreamType: iStreamType,
            iChannelID: channelId,
            bZeroChannel: bZeroChannel,
            success: function () {
                szInfo = "开始预览成功！";
                console.debug(devIp + "=ok=" + szInfo);
            },
            error: function (status, xmlDoc) {
                console.debug("status = " + status + ", xmlDoc=" + xmlDoc);
                if (403 === status) {
                    szInfo = "设备不支持Websocket取流！";
                } else {
                    szInfo = "开始预览失败！";
                }
                console.debug(devIp + "=fail=" + szInfo);
            }
        };
        if (!(typeof iWndIndex === 'undefined' || iWndIndex === null)) {
            param.iWndIndex = iWndIndex;
            wndIdx.indexOf(iWndIndex) > -1 || wndIdx.push(iWndIndex);
        }

        WebVideoCtrl.I_StartRealPlay(devIp, param);
    };

    startRealPlay();
}

// 停止预览
function clickStopRealPlay(iWndIndex) {
    var oWndInfo = WebVideoCtrl.I_GetWindowStatus(iWndIndex),
        szInfo = "";

    if (oWndInfo != null) {
        WebVideoCtrl.I_Stop({
            success: function () {
                szInfo = "停止预览成功！";
                console.debug(oWndInfo.szDeviceIdentify + "****" + szInfo);
            },
            error: function () {
                szInfo = "停止预览失败！";
                console.debug(oWndInfo.szDeviceIdentify + "@@@@@" + szInfo);
            }
        });
    }
}

// 全屏
function clickFullScreen() {
    WebVideoCtrl.I_FullScreen(true);
}

function splitScreen() {
    var iType = 1;
    if (chanels.length == 1) {
        iType = 1;
    } else if (chanels.length < 5) {
        iType = 2;
    } else if (chanels.length < 10) {
        iType = 3;
    } else if (chanels.length < 17) {
        iType = 4;
    }

    WebVideoCtrl.I_ChangeWndNum(iType);
}

// 登录IP
var loginIp = "192.168.0.77";
// 频道列表
var chanels = [];
// 设备IP
var devIp = [];
// 记录所有有视频的窗体
var wndIdx = [];
// 登录端口
var port = 80;
var username = "admin";
var pwd = "jsfj120JSFJ!@)";
// 主码流
var streamtype = 1;

function startView() {
    clickStartRealPlay(1);
    $("#stopVideo").text("停止预览").val("stop");
}

// 加载完成后完成自动登录和使用摄像头操作接听率
$(function () {
    console.debug("开始");
    console.info("检测插件：" + I_CheckPluginInstall());
    clickLogin();
    // 绑定下拉选中事件，选中后就直接开始预览。
    $("#channels").change(function () {
        $("#stopVideo").trigger("click").trigger("click");
    });
    // 全屏
    $("#full").click(function () {
        clickFullScreen();
    });
    // 绑定登录览事件
    $("#login").click(function () {
        var v = $(this).val();
        if ("out" == v) {
            clickLogout() && $(this).text("登录").val("in");
        } else {
            clickLogin(1) && $(this).text("登出").val("out");
        }
    });
    // 绑定停止预览事件
    // TODO 应该是调用方法保证正常执行后才调用修改text和value
    $("#stopVideo").click(function () {
        var v = $(this).val();
        if ("stop" == v) {
            clickStopRealPlay();
            $(this).text("开始预览").val("start");
        } else {
            startView();
        }
    });

    // 绑定全部分屏预览事件
    $("#splitScreen").click(function () {
        splitScreen();
        for (var c in chanels) {
            startRealPlay(1, devIp[0], port, chanels[c], false, parseInt(c, 10));
            console.debug(c + "===" + chanels[c]);
        }
    });

});